/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;

import commun.Bille;
import commun.Pions;

/**
 *
 * @author François & Renaud & Karen
 */
public class Grille {
    private Bille [] combi;     // combinaison courante... 
    private Bille[][] plateau;  // toutes les combinaisons
    public int numTour;         // ligne courante pour l'affichage
    private int colors;         // nb de couleurs parmis lesquelles on choisi
    private Pions [] pions;     // les pions (noir/Blanc)  ==> explication dans PIONS.java
    
    // cree le plateau de jeu  configs par default 
    public Grille(){
        plateau = new Bille[4][4];     //4 tentatives et 4 couleurs à trouver
        numTour = 0;                    
        combi = new Bille[4];
        pions = new Pions [4];
        colors = 6;
    }
    
    //cree le plateau de jeu suivant la configuration du joueur
    public Grille(int nbTentatives,int nbBilles, int colors){
        plateau = new Bille[nbTentatives][nbBilles];
        numTour = 0;
        combi = new Bille[nbBilles];
        pions = new Pions[nbTentatives];
        this.colors = colors;
    }
    
    //--------- GET & SET --------------------
    //retourne la combinaison du joueur
    public Bille [] get_combi (){ 
        return combi;
    }
    
    // retourne le plateau de jeu
    public Bille [][] get_plateau (){ 
       return plateau;
    }
    
    public int getNbColors(){ //retourne le nb de couleurs de choix
        return colors;
    }
    
    public int getNbColons(){ // renvoie le nombre de colonnes
        return combi.length;
    }
    
    public int getNbTent(){ // renvoie le nombre de tentatives max 
        return plateau.length;
    }

    // renvoie tous les pions
    public Pions [] getPion () { 
        return pions;
    }
    
    
    
    // --- Les procedures...... .
    
    // permet de faire sa combinaison    /// probleme faut reduir le choix en fonction de colors
 /*   public void choisirBille(int numero,char choix){    
        switch(choix){
             case '1' : combi[numero] = Bille.BLANC;break;
             case '2' : combi[numero] = Bille.BLEU;break;
             case '3' : combi[numero] = Bille.JAUNE;break;
             case '4' : combi[numero] = Bille.NOIR;break;
             case '5' : combi[numero] = Bille.ORANGE;break;
             case '6' : combi[numero] = Bille.ROUGE;break;
             case '7' : combi[numero] = Bille.VERT;break;
             case '8' : combi[numero] = Bille.VIOLET;break;
             default : System.out.println(" Ce n'est pas une des couleurs !");break; 
        }
    }    
   */
     public void choisirBille(int numero,char choix){    
        int i= Character.digit(choix, 10); // convertions vers int 
        if (i<= colors) {
            switch(choix){
                case '1' : combi[numero] = Bille.BLANC;break;
                case '2' : combi[numero] = Bille.BLEU;break;
                case '3' : combi[numero] = Bille.JAUNE;break;
                case '4' : combi[numero] = Bille.NOIR;break;
                case '5' : combi[numero] = Bille.ORANGE;break;
                case '6' : combi[numero] = Bille.ROUGE;break;
                case '7' : combi[numero] = Bille.VERT;break;
                case '8' : combi[numero] = Bille.VIOLET;break;

            }
        }
        else {
         System.out.println(" Ce n'est pas une des couleurs !");
        }
       }
    // permet de placer les billes de la combinaison du joueur    
    public void placerCombinaison(){
        System.arraycopy(combi, 0, plateau[numTour], 0, combi.length);
       //-- apres warning  remplacé par arraycopy ....
       /* int offset = plateau[numTour].length;
        for (int cpt = 0;cpt < offset;cpt++){  // à modier en system.arrey copy
          plateau[numTour][cpt] = combi[cpt]; 
       }
         * 
         */
    }   
    
    // placement des pions dans la grille 
    public void placerPions(Pions N_B){

        pions[numTour]= N_B;
    }
    public void placerPions(int N, int B){
        
        pions[numTour] = new Pions();
        pions[numTour].setBlanc(B);
        pions[numTour].setNoir(N);
    }
    

    //  existe une procedure dans protocol pour demander serveur.
   public boolean calcWin() {
       boolean win = false;
       
       if (pions[numTour].getNoir()==combi.length) {  // si le nombre pions noir =  à la quantité de billes alors c'est win
           win=true;
       }
       
       return win;
       
    }
 public void printCombi () {
 for (int i=0; i<combi.length; i++){
     System.out.print(" "+combi[i]);
    }
 }
  
}
